import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;


public class ConnexionControleur extends Thread{
	TCP c;
	UDP b;
	HashMap<Integer, HashMap<Integer, Bus>> InformationsBus;
	ArrayList<Ordre> OrdreAenvoyer;
	
	public ConnexionControleur(Socket s,HashMap<Integer, HashMap<Integer, Bus>> infos,ArrayList<Ordre> ordres){
		c = new TCP(s);
		InformationsBus=infos;
		OrdreAenvoyer=ordres;
	}

	public void run(){
		int numLigne,nbBus;
		c.openSession();
		String s=c.lire();
		
		if(s.split(":")[0].equals("Demande d'informations de la ligne ")){
			System.out.println(s);
			//envoi des infos de la ligne concernee
			numLigne = Integer.parseInt(s.split(":")[1]);
			nbBus=InformationsBus.get(numLigne).size();
			c.ecrire(Integer.toString(nbBus));
			Iterator<Bus> it = InformationsBus.get(numLigne).values().iterator();
			while (it.hasNext()) {
				c.envoyerObjet(it.next());
			}
			// reception des ordres du controleur
			int nbOrdre=Integer.parseInt(c.lire());
			Ordre o;
			for(int i=0;i<nbOrdre;i++){
				try {
					o=(Ordre)c.recevoirObjet();
					OrdreAenvoyer.add(o);
				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
			// envoi des ordres a la ligne de bus
			Iterator<Ordre> it1 = OrdreAenvoyer.iterator();
			try {
				b= new UDP("localhost",4001,1024);
			} catch (UnknownHostException e) {
				e.printStackTrace();
			} catch (SocketException e) {
				e.printStackTrace();
			}
			while (it1.hasNext()) {
				try {
					b.envoie(it1.next().toString());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
		}
		c.closeSession();
	}

}
